package cn.tedu.datamanager.serve.ipml;


import cn.tedu.datamanager.ex.ServiceException;
import cn.tedu.datamanager.mapper.UserMapper;
import cn.tedu.datamanager.pojo.dto.UserAddNewDTO;
import cn.tedu.datamanager.pojo.dto.UserLoginDTO;
import cn.tedu.datamanager.pojo.entity.Admin;
import cn.tedu.datamanager.pojo.entity.User;
import cn.tedu.datamanager.pojo.vo.AdminListItemVO;
import cn.tedu.datamanager.pojo.vo.LevelListItemVO;
import cn.tedu.datamanager.pojo.vo.UserLevelListItemVO;
import cn.tedu.datamanager.pojo.vo.UserListItemVO;
import cn.tedu.datamanager.serve.IUserService;
import cn.tedu.datamanager.web.ServiceCode;
import lombok.extern.slf4j.Slf4j;
import org.springframework.beans.BeanUtils;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Service;

import java.util.List;

/**
 * 处理项目类别数据的业务实现类
 *
 * @author java@tedu.cn
 * @version 0.0.1
 */
@Slf4j
@Service
public class UserServiceImpl implements IUserService {
    @Autowired
    UserMapper userMapper;

    @Override
    public List<UserListItemVO> list() {
        log.debug("开始处理【查询客户列表】的业务");
        // 调用Mapper查询服务项目列表
        List<UserListItemVO> list = userMapper.list();
        // 返回
        return list;
    }

    @Override
    public String login(UserLoginDTO userLoginDTO) {
        log.debug("开始处理【客户登录】的业务,userLoginDTO={}", userLoginDTO);
        //获取用户输入的数据
        String name = userLoginDTO.getUsername();
        String password = userLoginDTO.getPassword();
        System.out.println("用户名是:" + name);
        System.out.println("密码是:" + password);
        //检测用户名是否存在
        if(name != null) {
            int row = userMapper.selectByUsername(name);
            if (row != 1) {
                String message = "登录失败!用户名或密码错误";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
            }
            String pd = userMapper.getPassword(name);
            System.out.println("正在验证密码,查询到的密码是:" + pd);
            if (!(pd.equals(password))) {
                String message = "登录失败!用户名或密码错误";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
            }
        }else {
            String phonenumber = userLoginDTO.getPhonenumber();
            String row = userMapper.selectByphonenumber(phonenumber);
            if (row == null) {
                String message = "登录失败!该客户不存在!";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
            }
            String pd = userMapper.getPassword(row);
            System.out.println("正在验证密码,查询到的密码是:" + pd);
            if (!(pd.equals(password))) {
                String message = "登录失败!用户名或密码错误";
                log.warn(message);
                throw new ServiceException(ServiceCode.ERR_BAD_REQUEST, message);
            }
        }
        return "OK";
    }

    public void addNew(UserAddNewDTO userAddNewDTO) {
        log.debug("开始处理【添加客户】的业务，参数：{}", userAddNewDTO);

        log.debug("即将检查用户名是否被占用……");
        {
            // 从参数对象中获取username
            String username = userAddNewDTO.getUsername();
            // 调用adminMapper的countByUsername()方法执行统计查询
            int count = userMapper.selectByUsername(username);
            // 判断统计结果是否不等于0
            if (count != 0) {
                // 是：抛出异常
                String message = "添加客户失败，用户名【" + username + "】已经被占用！";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
            }
        }

        log.debug("即将检查手机号码是否被占用……");
        {
            // 从参数对象中获取手机号码
            String phone = userAddNewDTO.getPhonenumber();
            // 调用adminMapper的countByPhone()方法执行统计查询
            int count = userMapper.getPhoneNumber(phone);
            // 判断统计结果是否不等于0
            if (count != 0) {
                // 是：抛出异常
                String message = "添加客户失败，手机号码【" + phone + "】已经被占用！";
                log.debug(message);
                throw new ServiceException(ServiceCode.ERR_CONFLICT, message);
            }
        }

        // 创建Admin对象
        User admin = new User();
        // 通过BeanUtils.copyProperties()方法将参数对象的各属性值复制到Admin对象中
        BeanUtils.copyProperties(userAddNewDTO, admin);
        // 调用adminMapper的insert()方法插入数据
        log.debug("即将插入客户数据，参数：{}", admin);
        int rows = userMapper.insert(admin);
        // 判断插入数据的结果是否符合预期
        if (rows != 1) {
            String message = "添加客户失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_INSERT, message);
        }
    }

    @Override
    public void delete(Long id) {
        log.debug("开始处理【删除客户】的业务，参数：{}", id);
        // 判断参数id是否为1
        if (id == 666) {
            String message = "删除客户失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 根据参数id查询客户数据
        UserListItemVO queryResult = userMapper.getStandardById(id);
        // 判断客户数据是否不存在
        if (queryResult == null) {
            String message = "删除客户失败，尝试访问的数据不存在！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }

        // 执行删除客户
        int rows = userMapper.deleteById(id);
        if (rows != 1) {
            String message = "删除客户失败，服务器忙，请稍后再次尝试！";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_DELETE, message);
        }


    }

    @Override
    public Object selectupdate(Long id) {
        UserListItemVO queryResult = userMapper.getStandardById(id);
        if (queryResult == null) {
            String message = "查询服务项目失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        UserListItemVO rows = userMapper.selectupdate(id);
        return rows;
    }

    @Override
    public void update(UserAddNewDTO userAddNewDTO) {
        log.debug("开始处理【修改员工数据】的业务，参数：{}", userAddNewDTO);
        log.debug("即将检查用户名是否存在……");
        UserListItemVO queryResult = userMapper.getStandardById(userAddNewDTO.getId());
        if (queryResult == null) {
            String message = "修改员工数据失败,尝试访问的数据不存在!";
            log.warn(message);
            throw new ServiceException(ServiceCode.ERR_NOT_FOUND, message);
        }
        User album = new User();
//        // 将参数DTO中的数据复制到Album对象中
        BeanUtils.copyProperties(userAddNewDTO,album);
//        log.debug("即将插入服务项目数据：{}", album);
//        // 调用Mapper对象的insert()方法，插入服务项目数据
        log.debug("即将修改的数据为:"+album);
        userMapper.update(album);
    }

    @Override
    public List<UserLevelListItemVO> userlevellist() {
        log.debug("开始处理【查询员工职位列表】的业务");
        // 调用Mapper查询项目类别列表
        List<UserLevelListItemVO> list =  userMapper.userlevellist();
        // 返回
        return list;
    }


}

